/**
 * @file mlog.h
 * @brief 
 * 
 * @author dalin (dalin@open-robot.com)
 * @version 1.0
 * @date 2023-05-08
 * 
 * @copyright Copyright (c) 2023  Open Robot Tech.co, Ltd
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version <th>Author  <th>Description
 * <tr><td>2023-05-08 <td>1.0     <td>dalin     <td>Release
 * </table>
 */
 
#ifndef _MLOG_H_
#define _MLOG_H_

#include "string.h"

/* 添加实现printf的头文件 */ 
#include "usart.h"



/* 设置输出等级 */
#define MLOG_LEVEL         5  

/* 使能颜色 */
#define ULOG_USING_COLOR   1

/* 使能LOG输出 */
#define USEA_MAIN_DEBUG    1

/* 使能文件输出 */
#define USEA_FILE_PRINT    0  
/* 使能行号输出 */
#define USEA_LINE_PRINT    1


#if USEA_FILE_PRINT 
    #define FILE_D  __FILE__
#else   
    #define FILE_D  ""
#endif /* USEA_FILE_PRINT */

#if USEA_LINE_PRINT 
    #define LINE_D  __LINE__
#else   
    #define LINE_D  0
#endif /* USEA_LINE_PRINT */



#if ULOG_USING_COLOR
    #define CSI_START                      "\033["
    #define CSI_END                        "\033[0m"

    /* output log front color */
    #define F_BLACK                        "30m"    /* 黑色字 */  
    #define F_RED                          "31m"    /* 红色字 */
    #define F_GREEN                        "32m"    /* 绿色字 */
    #define F_YELLOW                       "33m"    /* 黄色字 */
    #define F_BLUE                         "34m"    /* 蓝色字 */
    #define F_MAGENTA                      "35m"    /* 紫色字 */
    #define F_CYAN                         "36m"    /* 天蓝字 */
    #define F_WHITE                        "37m"    /* 白色字 */
    /* output log background color */
    #define B_BLACK                        "40m"     /* 黑底  */  
    #define B_RED                          "41m"     /* 红底 */
    #define B_GREEN                        "42m"     /* 绿底 */
    #define B_YELLOW                       "43m"     /* 黄底 */
    #define B_BLUE                         "44m"     /* 蓝底 */
    #define B_MAGENTA                      "45m"     /* 紫底 */
    #define B_CYAN                         "46m"     /* 天蓝底 */
    #define B_WHITE                        "47m"     /* 白色底 */
#else
    #define CSI_START                      
    #define CSI_END                        
    /* output log front color */
    #define F_BLACK                        
    #define F_RED                          
    #define F_GREEN                        
    #define F_YELLOW                       
    #define F_BLUE                         
    #define F_MAGENTA                      
    #define F_CYAN                         
    #define F_WHITE 
    /* output log background color */
    #define B_BLACK                        
    #define B_RED                       
    #define B_GREEN                     
    #define B_YELLOW                    
    #define B_BLUE                      
    #define B_MAGENTA                   
    #define B_CYAN                       
    #define B_WHITE                                             
#endif /* ULOG_USING_COLOR */

#if USEA_MAIN_DEBUG

    #define MLOG_LEVEL_DIS     0   /* 禁止打印信息 */
    #define MLOG_LEVEL_REL     1   /* 发布版信息(必须打印) */
    #define MLOG_LEVEL_ERR     2   /* 错误信息 */
    #define MLOG_LEVEL_WAR     3   /* 警告信息 */
    #define MLOG_LEVEL_DBG     4   /* 调试信息 */
    #define MLOG_LEVEL_EXT     5   /* 附加调试信息 */

    #define log_printf(format, ...)     printf( format "\r\n", ##__VA_ARGS__)

    #define log_info(format, ...) 	    {if(MLOG_LEVEL>=MLOG_LEVEL_EXT) printf(CSI_START B_BLUE "[%s> %-4d]"CSI_END \
                                            CSI_START F_BLUE    " INFO : "  CSI_START F_CYAN     format  CSI_END" \r\n", FILE_D, LINE_D, ##__VA_ARGS__);}
    #define log_debug(format, ...) 	    {if(MLOG_LEVEL>=MLOG_LEVEL_DBG) printf(CSI_START B_MAGENTA "[%s> %-4d]"CSI_END \
                                            CSI_START F_MAGENTA " DEBUG: " CSI_START F_CYAN     format  CSI_END" \r\n", FILE_D, LINE_D, ##__VA_ARGS__);}
    #define log_warn(format, ...) 	    {if(MLOG_LEVEL>=MLOG_LEVEL_WAR) printf(CSI_START B_YELLOW "[%s> %-4d]"CSI_END \
                                            CSI_START F_YELLOW  " WARN : " CSI_START F_YELLOW   format  CSI_END" \r\n", FILE_D, LINE_D, ##__VA_ARGS__);}
    #define log_error(format, ...) 	    {if(MLOG_LEVEL>=MLOG_LEVEL_ERR) printf(CSI_START B_RED "[%s> %-4d]"CSI_END \
                                            CSI_START F_RED     " ERROR: " CSI_START F_RED      format  CSI_END" \r\n", FILE_D, LINE_D, ##__VA_ARGS__);}
    #define log_base(format, ...)       {if(MLOG_LEVEL>=MLOG_LEVEL_REL) printf(CSI_START B_GREEN "[%s> %-4d]"CSI_END \
                                            CSI_START F_GREEN   " BASE : "  CSI_START F_GREEN    format  CSI_END" \r\n", FILE_D, LINE_D, ##__VA_ARGS__);}

#else

    #define log_printf(format, ...)
    #define log_info(format, ...)
    #define log_debug(format, ...)
    #define log_error(format, ...)
    #define log_warn(format, ...)
    #define log_verbose(format, ...)
	#define log_base(format, ...)

#endif /* USEA_MAIN_DEBUG */
 
 
#endif			
											